/**
 * @Author: XIEAHAO
 * @Description:
 * @File:  enter
 * @Version: 1.0.0
 * @Date: 2025/3/7 上午10:35
 */
package response

import (
	"github.com/zeromicro/go-zero/rest/httpx"
	"net/http"
)

type Body struct {
	Code uint32      `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

// Response 是一个统一的 HTTP 响应处理函数。
// 它根据传入的错误参数决定返回成功的响应还是错误的响应。
// 参数：
//
//	r: 当前的 HTTP 请求对象。
//	w: HTTP 响应写入对象，用于向客户端发送响应。
//	resp: 成功时需要返回的数据。
//	err: 错误信息，如果为 nil 则表示成功，否则表示失败。
func Response(r *http.Request, w http.ResponseWriter, resp interface{}, err error) {
	// 如果 err 为 nil，表示请求处理成功
	if err == nil {
		// 创建一个成功的响应体
		// Code: 0 表示成功
		// Msg: "成功" 是默认的成功消息
		// Data: resp 是成功时返回的数据
		r := &Body{
			Code: 0,
			Msg:  "成功",
			Data: resp,
		}
		// 使用 httpx.WriteJson 将响应体以 JSON 格式写入 HTTP 响应中
		// http.StatusOK 是 HTTP 状态码 200，表示请求成功
		httpx.WriteJson(w, http.StatusOK, r)
		return
	}

	// 如果 err 不为 nil，表示请求处理失败

	// 定义一个默认的错误码，这里使用 uint32 类型的 7
	// 可以根据实际需求修改为其他错误码
	errCode := uint32(7)

	// 注释掉的代码，表示可以根据需要返回具体的错误信息
	// errMsg := "服务器错误"

	// 使用 httpx.WriteJson 将错误响应体以 JSON 格式写入 HTTP 响应中
	// Code: errCode 是错误码
	// Msg: err.Error() 是错误的具体信息
	// Data: nil 表示失败时没有数据返回
	httpx.WriteJson(w, http.StatusOK, &Body{
		Code: errCode,
		Msg:  err.Error(), // 返回指定的报错信息
		Data: nil,
	})
}
